"""
Модуль для анализа и визуализации данных о кластерах.

Модуль выполняет функции:
- Получает конфигурацию из файла config.yaml
- Кластеризует объекты методом K-Means согласно конфигурации
- Сохраняет результаты в файл
- Визуализирует результаты на 3D графике

Импорт необходимых модулей:
"""
from swarm_network import charts
from swarm_network import clusters
from swarm_network import data

# Чтение конфигурации и установка параметров генерации
config = data.read_config('config.yaml')
data_directory = config['data_directory']
data_filename = config['data_filename']

# Ручное конфигурирование
count_clusters = 20
# data_filename = "data-grid-100-side100000-z1000"
result_filename_objects = f'{data_filename}-results-clustering-objects'
result_filename_clusters = f'{data_filename}-results-clustering-clusters'

show_objects = True # Отобразить объекты на отдельном графике

# Получение объектов из файла
df_objects = data.get_data(data_directory, data_filename)

# Кластеризация
df_objects, df_clusters = clusters.clustering(df_objects, count_clusters)

# Вывод и сохранение результата
# Данные для анализа объектов
print(df_objects, end="\n\n")
print("Сохранение данных объектов в файл", end="\n\n")
data.save_data(df_objects, data_directory, result_filename_objects)

# Данные для анализа кластеров
print(df_clusters, end="\n\n")
print("Сохранение данных кластеров в файл", end="\n\n")
data.save_data(df_clusters, data_directory, result_filename_clusters)

# Визуализация результата
if show_objects:
    charts.print_objects_and_clusters(df_objects, df_clusters)
else:
    charts.print_clusters(df_objects, df_clusters)
